package com.bidevalution.business.context;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 评审因素
 * @author huyiqi
 * @date 2019/12/7
 */
public enum FileType {
    /**
     * 商务清单
     */
    BUSINESS(1, "商务清单"),
    /**
     * 商务附件
     */
    BUSINESS_OTHER_FILE(2, "商务附件"),
    /**
     * 技术标
     */
    TECHNOLOGY(4, "技术标"),
    /**
     * 资信标
     */
    COMPOSITE(8, "资信标"),
    /**
     * 资格审查材料
     */
    QUALIFICATION(16, "资格审查资料"),
    /**
     * 招标示范文本
     */
    TENDER_FILE(32, "附件")
    ;

    FileType(int code, String name) {
        this.code = code;
        this.name = name;
    }

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    public static List<FileType> getAllFileType() {
        FileType[] fileTypes = FileType.values();
        List<FileType> list = Arrays.asList(fileTypes);
        List arrList = new ArrayList(list);
        arrList.remove(TENDER_FILE);
        return arrList;
    }

    /**
     * 获取需要展示的附件类型
     * @param types 商务、技术、资信的相量相加
     * @return 返回需要展示的附件类型列表
     */
    public static List<FileType> getFileTypeList(int types) {
        List<FileType> list = new ArrayList<>();
        FileType[] fileTypes = FileType.values();
        for(FileType fileType:fileTypes) {
            int code = fileType.getCode();
            if((code & types) == code) {
                list.add(fileType);
            }
        }
        return list;
    }

    public static List<FileType> getZbFileTypeList() {
        List<FileType> list = new ArrayList<>();
        list.add(BUSINESS);
        list.add(TENDER_FILE);
        return list;
    }

    public static FileType getByCode(int code) {
        FileType result = null;
        FileType[] fileTypes = FileType.values();
        for(FileType fileType:fileTypes) {
            if(code == fileType.getCode()) {
                result = fileType;
                break;
            }
        }
        return result;
    }

    public static List<FileType> getTypesWithoutTech() {
        List<FileType> list = new ArrayList<>();
        list.add(BUSINESS);
        list.add(BUSINESS_OTHER_FILE);
        list.add(COMPOSITE);
        list.add(QUALIFICATION);
        return list;
    }

    private int code;
    private String name;
}
